#pragma once

#include "./base.hpp"

void PrintStd(const char *str);
std::string GetStdInput();

class Magic:public HouseBase{
public:
	void Clear()override{};
	bool PassFunction(User& user,std::vector<Land>& map,std::unordered_map<int,User*>& users) override
	{	
		if (user.GetStopNum()!=0) {
			return false;
		}
		printf("欢迎来到魔法屋,请选择你要陷害的对象\n");
		printf("0.放弃机会 1.钱夫人 2.阿土伯 3.孙小美 4.金贝贝\n");
		while (1) {
			auto get=GetStdInput();
			if (get!="0"&&get!="1"&&get!="2"&&get!="3"&&get!="4") {
				PrintStd("输入错误");
				continue;
			}else if(get=="0"){
				break;
			}else {
				if(get=="1"){
					if(users.find(1)!=users.end()){
						if(users[1]->GetStatus()==Bankruptcy)
						{
							printf("该玩家已破产\n");
						}else{
							auto num=users[1]->GetStopNum();
							if(user.GetId()==1)
							{
								users[1]->SetStopNum(num+MAGIC_DAY+1);
						    }else{
								users[1]->SetStopNum(num+MAGIC_DAY);
							}
							printf("钱夫人被滞留两回合\n");
							break;
						}
					}else{
						printf("该玩家不存在\n");
						continue;
					}
				}else if(get=="2"){
					if(users.find(2)!=users.end()){
						if(users[2]->GetStatus()==Bankruptcy)
						{
							printf("该玩家已破产\n");
						}else{
							auto num=users[2]->GetStopNum();
							if(user.GetId()==2)
							{
								users[2]->SetStopNum(num+MAGIC_DAY+1);
						    }else{
								users[2]->SetStopNum(num+MAGIC_DAY);
							}
							printf("阿土伯被滞留两回合\n");
							break;
						}
					}else{
						printf("该玩家不存在\n");
						continue;
					}

				}else if(get=="3"){
					if(users.find(3)!=users.end()){
						if(users[3]->GetStatus()==Bankruptcy)
						{
							printf("该玩家已破产\n");
						}else{
							auto num=users[3]->GetStopNum();
							if(user.GetId()==3)
							{
								users[3]->SetStopNum(num+MAGIC_DAY+1);
						    }else{
								users[3]->SetStopNum(num+MAGIC_DAY);
							}
							printf("孙小美被滞留两回合\n");
							break;
						}
					}else{
						printf("该玩家不存在\n");
						continue;
					}

				}else{
					if(users.find(4)!=users.end()){
						if(users[4]->GetStatus()==Bankruptcy)
						{
							printf("该玩家已破产\n");
						}else{
							auto num=users[4]->GetStopNum();
							if(user.GetId()==4)
							{
								users[4]->SetStopNum(num+MAGIC_DAY+1);
						    }else{
								users[4]->SetStopNum(num+MAGIC_DAY);
							}
							printf("金贝贝被滞留两回合\n");
							break;
						}
					}else{
						printf("该玩家不存在\n");
						continue;
					}

				}
			}
		}
		return false;
	};
	char MapChar() override{return 'M';};
	Color MapColor() override{return White;};
};
